package com.zzgc.modules.service;

import com.zzgc.common.entity.School;
import com.zzgc.common.entity.Student;
import com.zzgc.common.entity.StudentArchives;
import com.zzgc.modules.param.*;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

import java.util.List;

/**
 * 学生档案模板(StudentArchives)表服务接口
 *
 * @author makejava
 * @since 2022-11-22 08:43:29
 */
public interface StudentArchivesService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    StudentArchives queryById(Long id, String tableName);

    /**
     * 分页查询
     *
     * @param studentArchives 筛选条件
     * @return 查询结果
     */
    List<StudentArchives> queryByPage(StudentArchives studentArchives);

    /**
     * 查询 层级关系的
     *
     * @param studentArchives 筛选条件
     * @return 查询结果
     */
    School queryAll(StudentArchives studentArchives);

    /**
     * 查询最大的上传标记
     * @Param
     * @return
     */
    int maxFlag(String tableName);

    int maxNumber(String tableName, String sYear);

    long count(StudentArchives studentArchives);
    /**
     * 分页查询, 导出到表格
     *
     * @param studentArchives 筛选条件
     * @return 查询结果
     */
    List<ExportArchivesTemplate> queryAllByLimitExport(StudentArchives studentArchives);

    /**
     * 分页查询, 查询学生档案
     *
     * @param archivesParam 筛选条件
     * @return 查询结果
     */
    List<StudentArchivesParam> queryAllByLimitArchives(StudentArchivesParam archivesParam);

    /**
     * 合表查询, 查询(所有学校)学生档案
     *
     * @param archivesParam 筛选条件
     * @return 查询结果
     */
    List<StudentArchivesParam> queryAllSchoolByLimitArchives(StudentArchivesParam archivesParam);


    List<DataAnalysisParam> queryAllCountySchool(StudentArchivesParam archivesParam);
    /**
     * 新增数据
     *
     * @param studentArchives 实例对象
     * @return 实例对象
     */
    StudentArchives insert(Long userId, StudentArchives studentArchives);

    /**
     * 修改数据
     *
     * @param studentArchives 实例对象
     * @return 实例对象
     */
    StudentArchives update(Long userId, Long schoolId, StudentArchives studentArchives);

    /**
     * 修改数据
     *
     * @param studentArchives 实例对象
     * @return 实例对象
     */
    int updateDeleteFlags(List<StudentArchives> studentArchives);

    /**
     * 通过验光仪修改学生的视力数据数据
     *
     * @param refractometerParam 实例对象
     * @return 实例对象
     */
    StudentArchives insertStudentArchives(int number, Student student, RefractometerParam refractometerParam);

    /**
     * 通过电子视力表修改学生的视力数据数据
     *
     * @param visualParam 实例对象
     * @return 实例对象
     */
    StudentArchives insertStudentArchives(int number, Student student, VisualParam visualParam);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Long id, String tableName);

}
